package com.hz.admin.util;   
  
import java.util.ArrayList;
import java.util.HashMap;   
import java.util.Iterator;   
import java.util.List;
import java.util.Map;   
import javax.servlet.http.HttpSessionAttributeListener;   
import javax.servlet.http.HttpSessionBindingEvent;   
import javax.servlet.http.HttpSessionEvent;   
import javax.servlet.http.HttpSessionListener;   

import com.hz.supermanage.bean.Hzsyspersonnel;

/**
 * *****************************************************************************
 *               Copyright(c) 2010 by 哈尔滨华泽数码科技有限公司.
 *                       All rights reserved.
 *******************************************************************************
 *     File Name         :  com.hz.admin.util.SessionListener.java
 *     Description(说明)	: 监听session在线用户
 * -----------------------------------------------------------------------------
 *     No.        Date              Revised by           Description	  Nov 18, 2011           HTT              Created
 *****************************************************************************
 */
public class SessionListener implements HttpSessionListener,   
        HttpSessionAttributeListener {
	
    private static HashMap hUserName = new HashMap();// 保存sessionID和username的映射   
  
    /** 以下是实现HttpSessionListener中的方法* */  
    /* 创建session时，什么都不做 */  
    public void sessionCreated(HttpSessionEvent se) {
    	
    }   
  
    /* session失效时，删除列表中用户信息 */  
    public void sessionDestroyed(HttpSessionEvent se) {   
//      System.out.println("session失效：" + se.getSession().getId());   
        hUserName.remove(se.getSession().getId());   
    }   
  
    /** 以下是实现HttpSessionAttributeListener中的方法* */  
    /* 调用session.setAttribute("username","****")时，添加用户信息到列表中 */  
    public void attributeAdded(HttpSessionBindingEvent se) {   
        if (se.getName().equals("CurrentUser")) {   
//          System.out.println("新增session：" + se.getSession().getId());   
            hUserName.put(se.getSession().getId(), se.getValue());   
        }   
    }   
  
    /* 调用session.removeAttribute("username","****")时，删除列表中用户信息 */  
    public void attributeRemoved(HttpSessionBindingEvent se) {   
        if (se.getName().equals("CurrentUser")) {   
            if (hUserName.containsValue(se.getValue())) {   
                Iterator iter = hUserName.entrySet().iterator();   
                while (iter.hasNext()) {   
                    Map.Entry entry = (Map.Entry) iter.next();   
                    Object key = entry.getKey();   
                    Object val = entry.getValue();   
                    if (((String) val).equals(se.getValue())) {   
                        hUserName.remove(key);   
                    }   
                }   
            }   
        }   
    }   
  
    /* 调用更改"username"属性值时同时更改列表中用户信息 */  
    public void attributeReplaced(HttpSessionBindingEvent se) {   
        if (se.getName().equals("CurrentUser")) {   
            if (hUserName.containsValue(se.getValue())) {   
                //TODO   
                /*  
                Iterator iter = hUserName.entrySet().iterator();  
                while (iter.hasNext()) {  
                    Map.Entry entry = (Map.Entry) iter.next();  
                    Object key = entry.getKey();  
                    Object val = entry.getValue();  
                    if (((String) val).equals(se.getValue())) {  
                        hUserName.remove(key);  
                        hUserName.put(key, se.getValue());  
                    }  
                }  
                */  
            }   
        }   
    }   
  
	/* 返回用户列表 */  
    public static HashMap getHashMap() {   
        return hUserName;   
    }   
    
    /* 返回用户列表 */  
    public static List getList() { 
    	List ret = new ArrayList();
        if(hUserName!=null ){   
            Iterator iter = hUserName.entrySet().iterator();   
            while (iter.hasNext()) {   
                Map.Entry entry = (Map.Entry) iter.next();   
                SessionUserInfo val = (SessionUserInfo) entry.getValue();    
                ret.add(val);
            }      
        }
        return ret; 
    }
    /**  
     * 验证在session中是否存在已相同的用户登录,  
     * @param userInfo  
     * @return  
     */  
    public static boolean isUserNameLogin(Hzsyspersonnel userInfo){   
        boolean ret = false;       
        Object o = getHashMap().clone();   
        if(o!=null && userInfo!=null){   
        	HashMap map = (HashMap)o;   
            Iterator iter = map.entrySet().iterator();   
            while (iter.hasNext()) {   
                Map.Entry entry = (Map.Entry) iter.next();   
                Object val = entry.getValue();         
                Hzsyspersonnel u = (Hzsyspersonnel)val;   
                if(u.getPersonname().equals(userInfo.getPersonname())){   
                    ret = true;   
                    break;                     
                }   
            }      
        }          
        return ret;   
    }   
}  